#ifndef MATRIX_TO_MATRIX_H
#define MATRIX_TO_MATRIX_H

// General Cases:
// +=
// +
// -=
// Special Cases:
// ^

// General Cases
template< typename T, unsigned int R, unsigned int C >
Matrix<T,R,C>& operator+=( Matrix<T,R,C>& a, const Matrix<T,R,C>& b );

template< typename T, unsigned int R, unsigned int C >
Matrix<T,R,C> operator+( const Matrix<T,R,C>& a, const Matrix<T,R,C>& b );

template< typename T, unsigned int R, unsigned int C >
Matrix<T,R,C>& operator-=( Matrix<T,R,C>& a, const Matrix<T,R,C>& b );

template< typename T, unsigned int R, unsigned int C >
Matrix<T,R,C> operator-( const Matrix<T,R,C>& a, const Matrix<T,R,C>& b );

template< typename T, unsigned int N >
Matrix<T,N,N>& operator*=( Matrix<T,N,N>& a, const Matrix<T,N,N>& b );

template< typename T, unsigned int N, unsigned int M, unsigned O >
Matrix<T,N,O> operator*( const Matrix<T,N,M>& a, const Matrix<T,M,O>& b );

#endif
